package com.sky.service;

import com.sky.entity.User;
import com.sky.result.LimitQueryResult;
import com.sky.result.Result;

import java.util.List;

/**
 * 用户信息(User)表服务接口
 *
 * @author lining
 * @since 2024-10-23 16:33:48
 */
public interface UserService {
        /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Result<User> queryById(Long id);
    /**
     * 通过主键修改单条数据【非空字段】
     *
     * @param user 实例对象
     * @return 实例对象
     */
    Result<User> updateById(User user);
    /**
     * 通过主键修改单条数据【所有字段】
     *
     * @param user 实例对象
     * @return 实例对象
     */
    Result<User> updateAllById(User user);

    /**
     * 通过主键删除单条数据
     *
     * @param id 主键
     * @return 是否成功
     */
    Result<Integer> deleteById(Long id);
    
    /**
     * 通过主键批量删除数据
     *
     * @param idList 主键list
     * @return 删除数量
     */
    Result<Integer> deleteAllByIdList(List<Long> idList);
        
    /**
     * 精准查询
     *
     * @param user 实例对象
     * @return 对象列表
     */
    Result<List<User>> queryAll(User user);

    /**
     * 模糊查询
     *
     * @param user 实例对象
     * @return 对象列表
     */
    Result<List<User>> queryAllLike(User user);

    /**
     * 分页精准查询
     *
     * @param user 实例对象
     * @param limit 每页数量
     * @param offset 起始索引
     * @return 对象列表
     */
     Result<LimitQueryResult<List<User>>> queryAllLimit(User user, int limit, int offset);
     
     /**
     * 分页模糊查询
     *
     * @param user 实例对象
     * @param limit 每页数量
     * @param offset 起始索引
     * @return 对象列表
     */
     Result<LimitQueryResult<List<User>>> queryAllLikeLimit(User user, int limit, int offset);
     
     /**
     * 统计总行数
     *
     * @param user 查询条件
     * @return 总行数
     */
    Result<Long> count(User user);
    
     /**
     * 统计总行数(模糊查询)
     *
     * @param user 查询条件
     * @return 总行数
     */
    Result<Long> countLike(User user);
    
    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    Result<User> insert(User user);
    
    /**
     * 批量新增数据
     *
     * @param entities List<User> 实例对象列表
     * @return 影响行数
     */
    Result<Integer> insertBatch(List<User> entities);
    
    /**
     * 通过实体精准删除数据
     *
     * @param user 实例对象
     * @return 影响行数
     */
    Result<Integer> deleteAll(User user);
}
